<?php

namespace Utuo;

class Sms {
	private static $ac = '1001@500801410001';
	private static $authkey = '80298494289B7218DE364FE87C929D70';
	private static $cgid = 948;
	
	/**
	 * 发送手机短信（多个手机号之间用英文逗号分隔，如"13800000000,13811111111"）
	 * 
	 * @param string $mobile
	 * @param string $message
	 * @return integer 成功时返回1
	 */
	public static function send($mobile, $message) {
		$url = "http://smsapi.c123.cn/OpenPlatform/OpenApi?action=sendOnce&ac=%s&authkey=%s&cgid=%s&c=%s&m=%s";
		$url = sprintf($url, self::$ac, self::$authkey, self::$cgid, urlencode($message), $mobile);
		$xml = self::getContent($url);
		if ($xml !== false) {
			$xml = (array)simplexml_load_string($xml);
			return $xml['@attributes']['result'];
		} else {
			return false;
		}
	}
	
	// get file content
	private static function getContent($url, $timeout = 3) {
		$ch = curl_init();
		curl_setopt_array($ch, array(
				CURLOPT_URL => $url,
				CURLOPT_HEADER => false,
				CURLOPT_TIMEOUT => $timeout,
				CURLOPT_RETURNTRANSFER => 1,
				CURLOPT_CONNECTTIMEOUT => $timeout 
		));
		$data = curl_exec($ch);
		curl_close($ch);
		return $data ?  : false;
	}
}

// 返回成功代码：<xml name="sendOnce" result="1"><Item cid="500801410001" sid="1001" msgid="224082260992527900" total="1" price="0.1" remain="3.200" /></xml>
// 返回失败代码：$xml = '<xml name="sendOnce" result="-1"/>';

// http://smsapi.c123.cn/OpenPlatform/OpenApi?action=sendOnce&ac=1001@500801410001&authkey=80298494289B7218DE364FE87C929D70&cgid=948&c=hello&m=13838017968

/*
接口参数说明:
参数名	参数字段	参数说明
ac	用户账号	发送短信的帐号（员工编号@企业编号）
authkey	认证密钥	32位认证密钥（大写），企业管理员可以在软件或后台管理中获取
cgid	通道组编号	使用的通道组编号，在软件或后台管理可以查看可用的通道组
csid	签名编号	预设的企业签名编号，请使用自己企业已通过审核的签名编号
c	短信内容	发送内容(总长度应在1000个汉字以内)要使用UTF-8格式，如果不是请先转为UTF-8字符，再进行URL字符标准化转码。
{URL字符编码说明:返回字符串，此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号（%）后跟两位十六进制数，空格则编码为加号（+）}
ASP：server.URLEncode("短信内容")
PHP：urlencode("短信内容")
JAVA：java.net.URLEncoder.encode("短信内容")
m	发送号码	手机号码，如多个以英文逗号分隔（建议1000个及以内的手机号码，,超过系统上限将会返回参数错误）。 如: 13688998866,15899668855
t	发送时间	可选参数，无则立即发送，有则须在当前时间的一分钟之后，否则返回参数错误。格式:yyyyMMddHHmmss 如:20130721182038

例:
http://smsapi.c123.cn/OpenPlatform/OpenApi?action=sendOnce&ac=1001@500008880001&authkey=87B01469201D6557C2685137EB3B5DEC&cgid=80&c=%E6%B5%8B%E8%AF%95&m=13688998866,15899668855
成功时返回响应:
<xml name="sendOnce" result="1">
<Item cid="xxx" sid="xxx" msgid="xxx" total="2" fee="0.10" remain="170.04"/>
</xml>
失败时返回响应：
<xml name="sendOnce" result="-1"/>
返回参数说明:
参数名	参数字段	参数说明
cid	企业编号	发送短信的企业编号
sid	员工编号	发送短信的员工编号
msgid	发送编号	每次发送的消息编号
total	短信条数	任务需要的短信条数
fee	单价	任务中每条短信的价格
remain	余额	本次发送后企业的帐户余额

返回状态码说明：
参数名	参数说明
1	操作成功
0	帐户格式不正确(正确的格式为:员工编号@企业编号)
-1	服务器拒绝(速度过快、限时或绑定IP不对等)如遇速度过快可延时再发
-2	密钥不正确
-3	密钥已锁定
-4	参数不正确(内容和号码不能为空，手机号码数过多，发送时间错误等)
-5	无此帐户
-6	帐户已锁定或已过期
-7	帐户未开启接口发送
-8	不可使用该通道组
-9	帐户余额不足
-10	内部错误
-11	扣费失败
*/